#include<stdio.h>
#define sodinh 20001
#define maxLong 1000000000l;
#define socanh 30010
long nHeap=0,heap[sodinh],post[sodinh],d[sodinh],h[sodinh];
long n,m,mang[socanh][3];
long adj[sodinh],adjcost[sodinh],isfree[sodinh],c[sodinh];
/**************************************************************/
/************ Heap ********************************************/
/**************************************************************/
void update(long v){
    long chid=post[v],parent;
    if(chid==0)chid=++nHeap;
    parent=chid/2;
    while(parent>0 && d[heap[parent]]>d[v]){
        heap[chid]=heap[parent];
        post[heap[chid]]=chid;
        chid=parent;
        parent=chid/2;
    }
    heap[chid]=v;
    post[v]=chid;
}
long pop(){
    long r=1,c,v=heap[nHeap],ret=heap[1];
    nHeap--;
    while(2*r<=nHeap){
        c=2*r;
        if(c<nHeap && d[heap[c+1]]<d[heap[c]]) c++;
        if(d[v]<=d[heap[c]])break;
        heap[r]=heap[c];
        post[heap[r]]=r;
        r=c;
    }
    heap[r]=v;
    post[v]=r;
    return ret;
}
/******************************************************************************/
/************** Input *********************************************************/
/******************************************************************************/
void init(){
    long i;
    for(i=1;i<=n;i++)d[i]=maxLong;
    d[1]=0;
}
void input(){
    long i,u,v,l;
    FILE *fp=stdin;
    fscanf(fp,"%ld%ld",&n,&m);
    for(i=1;i<=m;i++){
        fscanf(fp,"%ld%ld%ld",&mang[i][0],&mang[i][1],&mang[i][2]);
        h[mang[i][0]]++;
        h[mang[i][1]]++;
    }
    
    h[1]=0;
    for(i=2;i<=n;i++)h[i]+=h[i-1];
    for(i=1;i<=m;i++){
        u=mang[i][0];
        v=mang[i][1];
        l=mang[i][2];
        
        adj[h[u]]=v;
        adjcost[h[u]]=l;
        h[u]--;
        
        adj[h[v]]=u;
        adjcost[h[v]]=l;
        h[v]--;
    } 
    h[n+1]=m*2;
}
void prim(){
    long i,u,iv,v;
    update(1);
    do{
        u=pop();
        isfree[u]=1;
        for(iv=h[u]+1;iv<=h[u+1];iv++){
            v=adj[iv];
            if(isfree[v]==0 && d[v]>d[u]+adjcost[iv]){
                d[v]=d[u]+adjcost[iv];
                update(v);
                c[v]=adjcost[iv];
            }
        }
    }while(nHeap>=0);
}
void output(){
    long w=0,i;
    for(i=1;i<=n;i++){
        w+=c[i];
    }
    printf("%ld",w);
}
int main(){
    input();
    init();
    prim();
    output();
    return 0;
}

